import os
from optparse import OptionParser


# TODO
file_ext = ["mp3", "MP3", "mp4", "MP4", "avi", "rmvb", "avi", "wmv", "mov", "mkv"]


def build_file_name(dst_dir, src_file, num=0):
    dst_file = os.path.join(dst_dir, src_file)
    if os.path.exists(dst_file):
        ext_x = "." + src_file.split(".")[-1]
        num += 1
        dst_file = src_file.replace(ext_x, "-%d%s" % (num, ext_x))
        return build_file_name(dst_dir, dst_file, num)
    else:
        return dst_file


def mv_file(dst_dir, src_dir, src_file):
    global debug
    ext = src_file.split(".")[-1]
    if ext not in file_ext:
        return
    dst_file = build_file_name(dst_dir, src_file)
    if debug:
        print "debug %s %s" % (os.path.join(src_dir, src_file), os.path.join(dst_dir, dst_file))
    else:
        print "mv %s %s" % (os.path.join(src_dir, src_file), os.path.join(dst_dir, dst_file))
        os.rename(os.path.join(src_dir, src_file), os.path.join(dst_dir, dst_file))


def detect_dir(dst_dir, src_dir, exclude_dir):
    print "tttt dst:%s src:%s exc:%s" % (dst_dir, src_dir, exclude_dir)
    for name in os.listdir(src_dir):
        if os.path.isdir(os.path.join(src_dir, name)):
            if not name.startswith(exclude_dir):
                detect_dir(dst_dir=dst_dir, src_dir=os.path.join(src_dir, name), exclude_dir=exclude_dir)
        else:
            mv_file(dst_dir=dst_dir, src_dir=src_dir, src_file=name)


def add_option():
    src_dir_default = os.path.abspath("./")
    dst_dir_default = os.path.abspath("./xxx")
    parser.add_option("-d", "--dst_dir", dest="dst_dir", default=dst_dir_default, help="dst dir")
    parser.add_option("-s", "--src_dir", dest="src_dir", default=src_dir_default, help="src dir")
    parser.add_option("-e", "--exclude_dir", dest="exclude_dir", default="x")
    parser.add_option("-b", "--debug", dest="debug", default="true")


if __name__ == '__main__':
    parser = OptionParser()
    add_option()
    options, _ = parser.parse_args()

    a_src_dir = os.path.abspath(options.src_dir)
    a_dst_dir = os.path.abspath(options.dst_dir)

    print "begin..."
    debug = str(options.debug).lower() == "true"
    print debug
    print a_src_dir
    print a_dst_dir
    print options.exclude_dir

    if not os.path.exists(a_dst_dir):
        os.mkdir(a_dst_dir)

    detect_dir(dst_dir=a_dst_dir, src_dir=a_src_dir, exclude_dir=options.exclude_dir)
    print "end."
